﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ExtremeEvents.Models;

namespace ExtremeEvents.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            ViewBag.patrocinio = getPatrocinioAndCreate();            
            return View(getUltimosEventos());
        }

        /// <summary>
        /// Obter os ultimos 3 eventos
        /// </summary>
        /// <returns>lista de eventos</returns>
        public List<Evento> getUltimosEventos()
        {
            ExtremeEventsIntity db = new ExtremeEventsIntity();
            List<Evento> listaEventos = db.eventos.SqlQuery("EXEC ext.obterUtimosEventos").ToList<Evento>();
            foreach (var item in listaEventos)
            {
                //Cria o flyer do respetivo evento
                string[] flyers = getFlyerAndCreate_ByEvento(item.id_evento);
                //coloca o caminho do flyer no evento
                item.srcUltimoFlyer = flyers[0];
                //Se a descricao for maior que 100 char entao é executado um substring e colocado os ...
                if (item.descricao.Length > 100)
                    item.descricao = item.descricao.Substring(0, 100) + "...";
            }

            return listaEventos;
        }

        /// <summary>
        /// Devolver ultimo patrocinio
        /// </summary>
        /// <returns>array com a descricao do patrocinio e o caminho da foto</returns>
        public string[] getPatrocinioAndCreate()
        {
            Patrocinio patrocinio = new Patrocinio();
            int count = 0;
            string[] patrocinio_str;

            ExtremeEventsIntity db = new ExtremeEventsIntity();
            //Obter ultimo patrocinio
            db.patrocinios.SqlQuery("EXEC ext.getPatrocinio").ToList<Patrocinio>();
            //Verificar se existe patrocinios
            count = db.patrocinios.Local.Count;
            if (count > 0)
            {
                patrocinio_str = new string[2];
                    //Processar a foto em objecto foto
                    patrocinio = db.patrocinios.Local.ElementAt(0);
                    //utiliza resource do sistema para gerar a imagem
                    if (patrocinio.foto != null)
                    {
                        System.Drawing.Bitmap img = new System.Drawing.Bitmap(new System.IO.MemoryStream(patrocinio.foto, false));
                        //materializa a imagem processada em um ficheiro de imagem e coloca numa pasta temporária
                        img.Save(Server.MapPath("~/Temp/Patrocinio") + @"\Pa" + patrocinio.id + ".jpg");
                        //coloca o caminho no buffer
                        patrocinio_str[0] = "/Temp/Patrocinio/Pa" + patrocinio.id + ".jpg";
                        patrocinio_str[1] = patrocinio.nome;
                    }
                    else
                    {
                        patrocinio_str[0] = null;
                        patrocinio_str[1] = patrocinio.nome;
                    }
            }
            else {
                patrocinio_str = new string[0];
            }
            return patrocinio_str;
        }
        /// <summary>
        /// Criar e devolver os flyers dos ultimos eventos
        /// </summary>
        /// <param name="id_evento"></param>
        /// <returns>array com os caminhos das imagens</returns>
        public string[] getFlyerAndCreate_ByEvento(int id_evento)
        {
            Flyer flyer = new Flyer();
            int count = 0;
            //buffer com o caminho das imagens
            string[] src;

            ExtremeEventsIntity db = new ExtremeEventsIntity();
            //Procura flyer do evento selecionado
            db.flyers.SqlQuery("EXEC ext.sp_fe_procurarFlyer_porEvento {0}", id_evento).ToList<Flyer>();
            //Se o evento tiver flyers então inicia o algoritmo de gerar imagem
            count = db.flyers.Local.Count;
            if (count > 0)
            {
                src = new string[count];
                //ciclo para percorrer os flyers encontrados do evento selecionado
                for (int i = 0; i < count; i++)
                {
                    //Processar o flyer em objecto flyer
                    flyer = db.flyers.Local.ElementAt(i);
                    //utiliza resource do sistema para gerar a imagem
                    System.Drawing.Bitmap img = new System.Drawing.Bitmap(new System.IO.MemoryStream(flyer.flyer_ole, false));
                    //materializa a imagem processada em um ficheiro de imagem e coloca numa pasta temporária
                    img.Save(Server.MapPath("~/Temp/Flyer") + @"\Fl" + flyer.id_flyer + ".jpg");
                    //coloca o caminho no buffer
                    src[i] = "/Temp/Flyer/Fl" + flyer.id_flyer + ".jpg";
                }

            }
            else
            {
                //Se não existir flyers mostra uma imagem default
                src = new string[1];
                src[0] = "/Images/Extreme.png";
            }

            return src;
        }
    }
}
